//package com.javaxiaobang;
//
//import java.util.concurrent.TimeUnit;
//import java.util.concurrent.locks.AbstractQueuedSynchronizer;
//import java.util.concurrent.locks.Condition;
//import java.util.concurrent.locks.Lock;
//
///**
// * 功    能：
// * 作    者：tianqiang
// * 时    间：2019/11/1
// */
//public class MyLock implements Lock {
//
//    private Helper helper = new Helper();
//
//    private class Helper extends AbstractQueuedSynchronizer {
//
//        /**
//         * 获取独占锁
//         *
//         * @param arg
//         * @return
//         */
//        @Override
//        protected boolean tryAcquire(int arg) {
//            int state = getState();
//            if (state == 0) {
//                //利用CAS原理修改state
//                if (compareAndSetState(0, arg)) {
//                    //设置当前线程占用资源
//                    setExclusiveOwnerThread(Thread.currentThread());
//                    return true;
//                } else if (getExclusiveOwnerThread() == Thread.currentThread()) {
//                    setState(getState() + arg);
//                }
//            }
//            return false;
//        }
//
//        /**
//         * 释放锁
//         *
//         * @param arg
//         * @return
//         */
//        @Override
//        protected boolean tryRelease(int arg) {
//            int state = getState() - arg;
//            if (state == 0) {
//                setExclusiveOwnerThread(null);
//                setState(state);
//                return true;
//            }
//            setState(state);
//            return false;
//        }
//
//        protected Condition newConditionObject() {
//            return new ConditionObject();
//        }
//
//    }
//
//    @Override
//    public void lock() {
//        helper.acquire(1);
//    }
//
//    @Override
//    public void lockInterruptibly() throws InterruptedException {
//
//    }
//
//    @Override
//    public boolean tryLock() {
//        return false;
//    }
//
//    @Override
//    public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
//        return false;
//    }
//
//    @Override
//    public void unlock() {
//        helper.release(1);
//    }
//
//    @Override
//    public Condition newCondition() {
//        return helper.newConditionObject();
//    }
//}
